﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DBQLTV;
namespace DAO
{
    public class CuonSachDAO
    {
        public string TT_DangMuon = "Đang mượn";
        public string TT_MuonQuaHan = "Mượn quá hạn";
        public string TT_TrongTV = "Trong thư viện";

        public bool InsertCuonSach(SACH Sach, int SoLuong)
        {
            using (DBQUANLYTHUVIENEntities entity = new DBQUANLYTHUVIENEntities())
            {
                int count = 0;
                for (int i = count; i < SoLuong; i++)
                {
                    CUONSACH cuonsach = new CUONSACH()
                    {
                        MaSach = Sach.MaSach,
                        TinhTrang = TT_TrongTV
                    };
                    entity.CUONSACHes.AddObject(cuonsach);
                }
                entity.SaveChanges();
                return true;
            }
        }
        public bool DeleteCuonSach(int MaCS)
        {
            using (DBQUANLYTHUVIENEntities entity = new DBQUANLYTHUVIENEntities())
            {
                CUONSACH cs = entity.CUONSACHes.FirstOrDefault(o => o.MaCuonSach == MaCS);
                if (cs == null)
                    return false;
                else
                {
                    if (cs.TinhTrang == TT_TrongTV)
                    {
                        SACH sach = entity.SACHes.FirstOrDefault(o => o.MaSach == cs.MaSach);
                        sach.SoLuong -= 1;
                        var list = new CTPhieuTraSachDAO().GetListCTPhieuTra(cs.MaCuonSach);
                        cs.CTPHIEUTRAs.Clear();
                        cs.PHIEUMUONSACHes.Clear();
                        cs.THONGKETRATRECTs.Clear();
                        entity.CUONSACHes.DeleteObject(cs);
                    }
                    else return false;
                    entity.SaveChanges();
                    return true;
                }
            }
        }
        public List<CUONSACH> GetListCuonSach()
        {
            using (DBQUANLYTHUVIENEntities entity = new DBQUANLYTHUVIENEntities())
            {
                return entity.CUONSACHes.ToList();
            }
        }
        public List<int> GetMaCuonSachVoiTinhTrang(string TenSach, string TinhTrang)
        {
            using (DBQUANLYTHUVIENEntities entity = new DBQUANLYTHUVIENEntities())
            {
                SachDAO sachDAO = new SachDAO();
                var listCuonSach = from temp in sachDAO.GetListCuonSachByTenSach(TenSach)
                                   where temp.TinhTrang.Equals(TinhTrang)
                                   select temp;
                List<int> result = new List<int>();
                foreach (var item in listCuonSach)
                {
                    result.Add(item.MaCuonSach);

                }
                return result;
            }
        }
        public List<int> GetMaCuonSachVoiTinhTrang(string TinhTrang)
        {
            using (DBQUANLYTHUVIENEntities entity = new DBQUANLYTHUVIENEntities())
            {
                SachDAO sachDAO = new SachDAO();
                var listCuonSach = from temp in GetListCuonSach()
                                   where temp.TinhTrang.Equals(TinhTrang)
                                   select temp;
                List<int> result = new List<int>();
                foreach (var item in listCuonSach)
                {
                    if (!result.Contains(item.MaCuonSach))
                        result.Add(item.MaCuonSach);
                }
                return result;
            }
        }
        public static CUONSACH GetCuonSachByKey(int MaCuonSach)
        {
            using (DBQUANLYTHUVIENEntities entity = new DBQUANLYTHUVIENEntities())
            {
                CUONSACH cuonsach = entity.CUONSACHes.FirstOrDefault(o => o.MaCuonSach == MaCuonSach);
                return cuonsach;
            }
        }
        public DateTime GetNgayMuonCuonSach(int MaCuonSach)
        {
            using (DBQUANLYTHUVIENEntities entity = new DBQUANLYTHUVIENEntities())
            {
                CUONSACH cuonsach = entity.CUONSACHes.FirstOrDefault(o => o.MaCuonSach == MaCuonSach);
                return cuonsach.NgayMuon.Value;
            }
        }
        public List<CUONSACH> GetCuonSachMuonByDocGia(int MaDocGia)
        {
            using (DBQUANLYTHUVIENEntities entity = new DBQUANLYTHUVIENEntities())
            {
                DocGiaDAO docGiaDAO = new DocGiaDAO();
                DOCGIA docGia = entity.DOCGIAs.FirstOrDefault(o => o.MaDG == MaDocGia);
                if (docGia != null)
                {
                    return docGia.CUONSACHes.ToList();
                }
                return null;
            }
        }
        public bool SetTinhTrangCuonSach(int MaCuonSach, string TinhTrang)
        {
            using (DBQUANLYTHUVIENEntities entity = new DBQUANLYTHUVIENEntities())
            {
                CUONSACH cuonsach = entity.CUONSACHes.FirstOrDefault(o => o.MaCuonSach == MaCuonSach);
                cuonsach.TinhTrang = TinhTrang;
                entity.SaveChanges();
                return true;
            }
        }
    }
}
